MSSQL StoredProc parameter ako CatalogName

Otázka od: sulodk@atlas.cz

10. 12. 2003 16:49

Zdar,
ako sa da v MSSQL vytvorit nejaka takato SP ?:
CREATE PROCEDURE [dbo].[AAA]
@CatalogName varchar(128),
@Name varchar(128) OUTPUT
AS
SELECT @Name = [name]
FROM @CatalogName..[TABLE1]
RETURN @@Error
GO
.. t.j. potrebujem ako parameter zadat nazov katalogu, kde sa potrebna tbl.
nachadza..
Dik
Miso


Odpovedá: Lstiburek Pavel

10. 12. 2003 16:58

Podivej se na sp_executesql . Pokud to nepujde takhle tak nijak !

Pavel



> From: sulodk@atlas.cz [mailto:sulodk@atlas.cz]
> Zdar,
> ako sa da v MSSQL vytvorit nejaka takato SP ?:
> CREATE PROCEDURE [dbo].[AAA]
> @CatalogName varchar(128),
> @Name varchar(128) OUTPUT
> AS
> SELECT @Name = [name]
> FROM @CatalogName..[TABLE1]
> RETURN @@Error
> GO
> .. t.j. potrebujem ako parameter zadat nazov katalogu, kde sa
> potrebna tbl.
> nachadza..


Odpovedá: Vlastimil Bardon

10. 12. 2003 18:05

No, problem tam bude. Pokud nevis CatalogName (respektive jmeno serveru,
tabulky, nebo cokoli podobneho), tak se pouzije toto:

exec('SELECT name FROM '+@CatalogName+'..TABLE1')

Ale nemas sanci dat ten vysledek do @Name

Takze jedina sance je, udelat si tu proceduru na tom druhem serveru a volat ji
cca takto:

DECLARE @Proc varchar(100)
SELECT @Proc = @CatalogName+'.dbo.MojeVzdalenaProcedura'
Exec @Proc @Nazev OUT

.... jinymi slovy - pouzivas-li exec, pak muzes mit jmeno procedury v promenne

-----Original Message-----
From: Lstiburek Pavel [mailto:lstiburek@ceb.cz]
Sent: Wednesday, December 10, 2003 4:58 PM

Podivej se na sp_executesql . Pokud to nepujde takhle tak nijak !

Pavel

> From: sulodk@atlas.cz [mailto:sulodk@atlas.cz]
> Zdar,
> ako sa da v MSSQL vytvorit nejaka takato SP ?:
> CREATE PROCEDURE [dbo].[AAA]
> @CatalogName varchar(128),
> @Name varchar(128) OUTPUT
> AS
> SELECT @Name = [name]
> FROM @CatalogName..[TABLE1]
> RETURN @@Error
> GO
> .. t.j. potrebujem ako parameter zadat nazov katalogu, kde sa
> potrebna tbl.
> nachadza..



Odpovedá: Lstiburek Pavel

11. 12. 2003 9:29

Jednou z moznosti je:

DECLARE @command nvarchar(1000),
                @Name nvarchar(100)
SET @Command = 'SELECT @Name = [name] FROM ' + @CatalogName + '..[TABLE1]'
EXECUTE sp_executesql @Command, N'@Name nvarchar(100)OUTPUT', @Name OUTPUT

To funfuje celkem v pohode.

Pavel

PS: I kdyz tento zpusob leta, neni prave nejstastnejsi


> From: Vlastimil Bardon [mailto:bardon@akord-soft.cz]
> No, problem tam bude. Pokud nevis CatalogName (respektive
> jmeno serveru, tabulky, nebo cokoli podobneho), tak se pouzije toto:
>
> exec('SELECT name FROM '+@CatalogName+'..TABLE1')
>
> Ale nemas sanci dat ten vysledek do @Name
>
> Takze jedina sance je, udelat si tu proceduru na tom druhem
> serveru a volat ji cca takto:
>
> DECLARE @Proc varchar(100)
> SELECT @Proc = @CatalogName+'.dbo.MojeVzdalenaProcedura'
> Exec @Proc @Nazev OUT
>
> .... jinymi slovy - pouzivas-li exec, pak muzes mit jmeno
> procedury v promenne
>
> -----Original Message-----
> From: Lstiburek Pavel [mailto:lstiburek@ceb.cz]
> Sent: Wednesday, December 10, 2003 4:58 PM
>
> Podivej se na sp_executesql . Pokud to nepujde takhle tak nijak !
>
> Pavel
>
> > From: sulodk@atlas.cz [mailto:sulodk@atlas.cz]
> > Zdar,
> > ako sa da v MSSQL vytvorit nejaka takato SP ?:
> > CREATE PROCEDURE [dbo].[AAA]
> > @CatalogName varchar(128),
> > @Name varchar(128) OUTPUT
> > AS
> > SELECT @Name = [name]
> > FROM @CatalogName..[TABLE1]
> > RETURN @@Error
> > GO
> > .. t.j. potrebujem ako parameter zadat nazov katalogu, kde sa
> > potrebna tbl.
> > nachadza..
>